home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-04
/
netprog.zip
/
NETPROG.TAR
/
reliable
/
rudpcli.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-12-17
|
1KB
|
64 lines
/*
* Example of a more reliable echo client using UDP protocol.
*/
#include "rudp.h"
main(argc, argv)
int argc;
char *argv[];
{
int sockfd;
pname = argv[0];
if ( (sockfd = udp_open(HOST, MYECHO_SERVICE, 0, 0)) < 0)
err_sys("udp_open error");
doit(stdin, sockfd); /* do it all */
exit(0);
}
/*
* Read the contents of the FILE *fp, write each line to the
* socket (to the server process), then read a line back from
* the socket and print it on the standard output.
*/
doit(fp, sockfd)
register FILE *fp;
register int sockfd;
{
int n, sendlen;
long seqsend;
char sendline[MAXLINE], recvline[MAXLINE];
seqsend = 0; /* initialize sequence number to send */
while (fgets(sendline + sizeof(long), MAXLINE, fp) != NULL) {
seqsend++; /* increment sequence number */
bcopy((char *) &seqsend, sendline, sizeof(long));
sendlen = strlen(sendline + sizeof(long)) + sizeof(long);
rexmit:
if ( (n = dgsendrecv(sockfd, sendline, sendlen, recvline,
MAXLINE,
(struct sockaddr *) 0, 0)) < 0) {
if (errno == EINTR)
err_sys("client: no response from server");
else
err_dump("client: dgsendrecv error");
}
if (bcmp((char *) &seqsend, recvline, sizeof(long)) != 0) {
err_ret("incorrect sequence# received");
goto rexmit;
}
recvline[n] = 0; /* null terminate */
fputs(recvline + sizeof(long), stdout);
}
if (ferror(fp))
err_dump("client: error reading file");
}